package cz.vse.adventura.po1715.xkosd00_kostka.hra;


/*******************************************************************************
 * Knihovní třída {@code Texty} slouží jako schránka na textové konstanty,
 * které se používají na různýcm místech programu.
 * Centralizací definic těchto textových řetězců lze nejsnadněji dosáhnout toho,
 * že texty, které majuí být shodné na různých místech programu,
 * budou doopravdy shodné.
 *
 * @author    Dominik KOSTKA
 * @version   1.0
 */
public class Texty
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    /** Jméno autora programu. */
    public static final String AUTOR = "KOSTKA Dominik";

    /** X-name autora programu. */
    public static final String XNAME = "XKOSD00";

    /** Názvy používaných prostorů - místností. */
    public static final String
            HALA = "Hala",
            RECEPCE = "Recepce",
            WC  = "WC",
            TOALETA= "Toaleta",
            VÝTAH = "Výtah",
            PATRO1  = "Patro1",
            PATRO2 = "Patro2",
            POKOJ11 = "Pokoj11",
            POKOJ12 = "Pokoj12",
            POKOJ13 = "Pokoj13",
            POKOJ14 = "Pokoj14",
            POKOJ15 = "Pokoj15",
            POKOJ21 = "Pokoj21",
            POKOJ22 = "Pokoj22",
            POKOJ23 = "Pokoj23",
            POKOJ24 = "Pokoj24",
            POKOJ25 = "Pokoj25",
            KOUPELNA1 = "Koupelna1",
            ZKRATKA = "Zkratka",
            KOUPELNA2 = "Koupelna2";
    
    /** Názvy používaých objektů. */
    public static final String
            INFORMAČNÍ_TABULE = "InformačníTabule",
            UMYVADLO= "umyvadlo",
            MÝDLO= "mýdlo",
            TOALETNÍ_PAPÍR = "ToaletníPapír",
            FÉN= "fén",
            ZRCADLO = "zrcadlo",
            RECEPČNÍ = "recepční",
            OKNO1   = "okno1",
            OKNO2 = "okno2",
            VYPÍNAČ1 = "vypínač1",
            VYPÍNAČ2 = "vypínač2",
            POSTEL = "postel",
            STOLEK = "stolek",
            ŽIDLE = "židle",
            SKŘÍŇ = "skříň",
            ZÁCHOD = "záchod",
            TRECEPCE = "TRecepce",
            TPATRO1 = "TPatro1",
            TPATRO2 = "TPatro2",
            MAGIE = "Magie",
            SPRCHA = "sprcha";


    /** Názvy používaých příkazů. */
    public static final String
            pHELP    = "?",
            pJDI     = "Jdi",
            pOTEVŘI  = "Otevři",
            pZAVŘI   = "Zavři",
            pVEZMI   = "Vezmi",
            pPOLOŽ   = "Polož",
            pSTISKNI = "Stiskni",
            pOSLOV = "Oslov",
            pREGISTRUJ  = "Registruj",
            pKONEC = "Konec",
            pVSTAŇ = "Vstaň",
            pKOUKNI = "Koukni",
            pKouzlo = "Kouzlo",
            pABRAKA = "Abrakadabra",
            pSEDNI = "Sedni";


    /** Formát dodatku zprávy informujícího o aktuálním stavu hráče. */

//    public static final String
//            SOUSEDÉ  = "Můžete se přesunout do místností: ",
//            PŘEDMĚTY = "V místnosti se nachází: ",
//            BATOH    = "Máte v držení předměty: ",
//            FORMÁT_INFORMACE = "\n\nNacházíte se v místnosti: %s" +
//                               "\n" + SOUSEDÉ  + "%s" +
//                               "\n" + PŘEDMĚTY + "%s" +
//                               "\n" + BATOH    + "%s";

    public static final String
            SOUSEDÉ  = "Sousedé:  ",
            PŘEDMĚTY = "Předměty: ",
            BATOH    = "Batoh:    ",
            FORMÁT_INFORMACE = "\n\nNacházíte se v místnosti: %s" +
                               "\n" + SOUSEDÉ  + "[%s]" +
                               "\n" + PŘEDMĚTY + "[%s]" +
                               "\n" + BATOH    + "[%s]";


    /** Texty zpráv vypisovaných v reakci na povinné příkazy.
     *  Pořáteční z (zpráva) slouží k odlišení od stavů. */
    public  static final String
    zANP            = "", //"\nZadaná akce nebyla provedena";
    zPORADÍM        = "\nChcete-li poradit, zadejte příkaz ?",
    zPRÁZDNÝ_PŘÍKAZ = "\nZadal(a) jste prázdný příkaz." + zPORADÍM,
    zNEZNÁMÝ_PŘÍKAZ = "\nTento příkaz neznám. " + zPORADÍM,

    zPŘESUN         = "Přesunul(a) jste se do místnosti: ",
    zCIL_NEZADAN    = zANP + "\nNebyla zadána místnost, do níž se má přejít.",
    zNENÍ_CIL       = zANP + "\nDo zadané místnosti se odsud nedá přejít.",

    zZVEDNUTO       = "\nVzal(a) jste předmět: ",
    zPOLOŽENO       = "\nPoložil(a) jste předmět: ",
    zPŘEDMĚT_NEZADAN= zANP + "\nNebyl zadán předmět, s nímž mám manipulovat.",
    zTĚŽKÝ_PŘEDMĚT  = zANP + "\nZadaný předmět nelze zvednout: ",
    zNENÍ_PŘEDMĚT   = zANP + "\nZadaný předmět v místnosti není: ",
    zNENÍ_V_BATOHU  = zANP + "\nPředmět není v batohu: ",
    zBATOH_PLNÝ     = zANP +
                      "\nZadaný předmět nemůžete vzít, máte už obě ruce plné.",

    zNÁPOVĚDA       = "\nPříkazy, které je možno v průběhu hry zadat:" +
                      "\n============================================",

    zUVÍTÁNÍ        =
            "Dobrý den. Vítejte v hostelu Hostel Praha. Nacházíte se ve " +
            "vstupní hale." + "\nVaším úkolem je donést toaletní papír" +
            " do koupelny v 1. patře a mýdlo do koupelny ve 2. patře.",

    zCELÉ_UVÍTÁNÍ   = zUVÍTÁNÍ +
                      String.format(FORMÁT_INFORMACE,
                                    HALA, cm(RECEPCE, WC),
                      cm(INFORMAČNÍ_TABULE), cm()),

    zKONEC         = "Konec hry. \nDěkujeme, že jste zkusil(a) naši hru.";


    /** Texty zpráv vypisované v reakci na nepovinné příkazy. */
    public static final String

    KOUZLO_AKTIVNÍ = "Kouzlo funguje jen na začátku hry.",

    NELZE_OTEVŘÍT = "Zadaný předmět nelze otevřít: ",

    NELZE_ZAVŘÍT = "Zadaný předmět nelze zavřít: ",

    OTEVŘENO = "Úspěšně jste otevřel(a) ",

    ZAVŘENO = "Úspěšně jste zavřel(a) ",

    NEZAVŘENO = " nelze zavřít, protože není otevřené.",

    ŠPATNÉ_PATRO = " není v daném patře.",
            
    NELZE_KOUKNOUT = "Na tento předmět se nelze kouknout: ",

    KOUKNUTO = "Koukl(a) jste se na zadaný předmět: ",

    OSLOVENÍ_ODPOVĚĎ = "Dobrý den. Můžete se zaregistrovat.",

    NELZE_OSLOVIT = "Zadaný objekt nelze oslovit: ",

    NELZE_STISKNOUT = "Zadaný předmět nelze stisknout: ",

    SEDNUL = "Sednul(a) jste si na židli.",

    NELZE_SEDNOUT = "Na zadaný předmět si nelze sednout.",

    VSTAL = "Vstal(a) jste ze židle.",

    NELZE_VSTÁT = "Ze zadaného předmětu nelze vstát.",

    NELZE_REGISTROVAT = "Neoslovil jste recepční. Nemůžete se registrovat.",

    REGISTROVANO = "Registroval(a) jste se.",

    NEREGISTROVÁNO = "Nejdříve se musíte zaregistrovat.",

    UŽ_REGISTROVÁNO = "Už jste registrován.",

    JE_TMA = "V místnosti je tma. Musíte neprve rozsvítit.",

    NENÍ_XNAME = "Zadaný parametr musí být xname.",

    SVĚTLA = "Světla v místnosti ",

    NENÍ_PARAMETR = "Zadaný parametr neodpovídá příkazu.",

    NOVÝ_SOUSED = "Objevil se nový soused zkratka.",

    NOVÝ_PŘEDMĚT = "Byl vám vyprázdněn batoh a máte v něm nový předmět: ",

    VÝHRA = "Hurá! Výhral(a) jste hru. Hra skončila.";




//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

    /***************************************************************************
     * Vrátí řetězec obsahující zadané názvy oddělené čárkami.
     *
     * @param názvy Názvy, které je třeba sloučit
     * @return Výsledný řetězec ze sloučených zadaných názvů
     */
    public static String cm(String... názvy)
    {
        if (názvy.length == 0) {
            return "";
        }
        StringBuilder sb = new StringBuilder(názvy[0]);
        for (int i=1;   i < názvy.length;   i++) {
            sb.append(", ").append(názvy[i]);
        }
        return sb.toString();
    }



//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /** Soukromý konstruktor zabraňující vytvoření instance.*/
    private Texty() {}



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        Texty inst = new Texty();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
